JSP (Java Server Pages) একটি সার্ভার-সাইড প্রযুক্তি যা ডাইনামিক ওয়েব পেজ তৈরি করতে ব্যবহৃত হয়। এটি Java প্রযুক্তির উপর ভিত্তি করে কাজ করে এবং HTML, XML বা অন্যান্য মার্কআপ কনটেন্টের সাথে Java কোড এমবেড করার মাধ্যমে ডাইনামিক কন্টেন্ট তৈরি করতে সাহায্য করে। JSP আর্কিটেকচার বেশ কিছু স্তরের মাধ্যমে কাজ করে, যা একটি ওয়েব অ্যাপ্লিকেশন তৈরি এবং পরিচালনা করার জন্য প্রয়োজনীয় উপাদানগুলো অন্তর্ভুক্ত করে।
JSP আর্কিটেকচারের উপাদান
1. ক্লায়েন্ট (Client):
জেএসপি অ্যাপ্লিকেশনটি ব্যবহারকারী (Client) বা ব্রাউজার থেকে রিকোয়েস্ট গ্রহণ করে। ক্লায়েন্ট সাধারণত ওয়েব ব্রাউজারের মাধ্যমে সার্ভারের সাথে যোগাযোগ করে।
2. জেএসপি পেজ (JSP Page):
জেএসপি পেজ হল HTML এবং Java কোডের সমন্বয়ে গঠিত একটি ডকুমেন্ট। এটি ওয়েব অ্যাপ্লিকেশনের ইউজার ইন্টারফেস (UI) অংশ সরবরাহ করে এবং ব্যবহারকারী ইন্টারঅ্যাকশন পরিচালনা করে। জেএসপি পেজে Java কোড সন্নিবেশ করা হয় যা ডাইনামিক কন্টেন্ট প্রদর্শন করে।
3. কন্টেইনার (Container):
JSP কন্টেইনার হল একটি সার্ভার যা জেএসপি পেজ এবং সাভলেট প্রক্রিয়াগুলি পরিচালনা করে। এটি জেএসপি পেজের কার্যকারিতা নিশ্চিত করে, যেমন পেজটি কম্পাইল করা, সার্ভারে পাঠানো, এবং Java কোডের সাথে HTML কন্টেন্ট রেন্ডার করা। কন্টেইনারটি বেশিরভাগ সময় Apache Tomcat বা JBoss সার্ভার হতে পারে।
4. ট্রান্সলেটার (Translator):
যখন কোনো জেএসপি পেজ ক্লায়েন্ট থেকে প্রথমবার রিকোয়েস্ট হয়, তখন কন্টেইনার পেজটিকে Java সাভলেট কোডে ট্রান্সলেট (পুনর্লিখন) করে। এই পদ্ধতিতে HTML মার্কআপ এবং Java কোড একসঙ্গে সাভলেট কোডে পরিণত হয়, যা পরে কম্পাইল হয়।
5. কম্পাইলার (Compiler):
ট্রান্সলেটার দ্বারা তৈরি Java কোডটি কম্পাইল হয়ে একটি সাভলেট ক্লাসে রূপান্তরিত হয়, যা পরে JSP সাভলেট হিসেবে কাজ করতে পারে। সাভলেট কোডটি রিকোয়েস্ট গ্রহণ করে এবং ডাইনামিক কন্টেন্ট তৈরি করে।
6. এক্সিকিউশন (Execution):
কম্পাইলড সাভলেট ক্লাসটি পরে সার্ভারে এক্সিকিউট (চালিত) হয় এবং ক্লায়েন্টকে ডাইনামিক কন্টেন্ট প্রদান করে। এর পর, জেএসপি পেজটি আবার HTML কনটেন্ট হিসেবে রেন্ডার হয় এবং ক্লায়েন্ট ব্রাউজারে পাঠানো হয়।
7. রেসপন্স (Response):
একবার সাভলেট কোডটি এক্সিকিউট হয়ে গেলে, উৎপন্ন ডাইনামিক HTML বা XML রেসপন্স ক্লায়েন্ট ব্রাউজারে পাঠানো হয়, যেখানে এটি প্রদর্শিত হয়।
JSP আর্কিটেকচারের কাজের ধারা:
- ক্লায়েন্ট একটি HTTP রিকোয়েস্ট পাঠায় সার্ভারের কাছে।
- জেএসপি কন্টেইনার ওই রিকোয়েস্টটি গ্রহণ করে, এবং যদি পেজটি প্রথমবার রিকোয়েস্ট হয়, তাহলে সেটি ট্রান্সলেট এবং কম্পাইল করে।
- কম্পাইল হওয়া সাভলেট কোড এক্সিকিউট হয় এবং ডাইনামিক কন্টেন্ট প্রস্তুত করা হয়।
- ডাইনামিক কন্টেন্ট (HTML) ক্লায়েন্টকে রেসপন্স হিসেবে পাঠানো হয়।
- ক্লায়েন্ট ব্রাউজারে সেগুলি প্রদর্শিত হয়।
এভাবে JSP প্রযুক্তি কাজ করে এবং ডাইনামিক ওয়েব পেজ তৈরি করতে সহায়তা করে, যেখানে Java কোড এবং HTML একত্রে ব্যবহৃত হয়।
জেএসপি (JSP) আর্কিটেকচার হল একটি মডেল-ভিউ-কন্ট্রোলার (MVC) ডিজাইন প্যাটার্নের উপর ভিত্তি করে তৈরি। এতে, Java সার্ভার পেজ (JSP) একটি মডেল হিসেবে কাজ করে, যেখানে HTML পেজের মধ্যে Java কোড এমবেড করা হয় এবং এটি ডাইনামিক কন্টেন্ট তৈরি করতে সাহায্য করে।
জেএসপি আর্কিটেকচার
জেএসপি আর্কিটেকচার সাধারণত কয়েকটি প্রধান উপাদান দ্বারা গঠিত:
- JSP পেজ: এটি মূলত HTML এবং Java কোডের মিশ্রণ। এটি কাস্টম ট্যাগ এবং Java কোড ব্যবহার করে ডাইনামিক কন্টেন্ট জেনারেট করে।
- টেমপ্লেট পেজ (Template Page): এই পেজটি হল JSP ফাইল যেখানে HTML বা XML টেমপ্লেট থাকে এবং Java কোড এমবেড করা হয়। এটি কন্টেন্ট তৈরি করতে সহায়তা করে।
- সার্ভার: জেএসপি কোড সার্ভারে রান করে এবং HTTP রিকোয়েস্ট প্রসেস করে। সার্ভার (যেমন Apache Tomcat) এই কোডকে কম্পাইল করে সার্ভার সাইডে প্রক্রিয়া সম্পন্ন করে।
- JSP কন্টেইনার: এটি একটি পরিবেশ যা জেএসপি পেজের রানটাইম কন্ট্রোল করে। যখন একটি রিকোয়েস্ট আসে, তখন এটি JSP পেজটি কম্পাইল করে এবং রেসপন্স ফেরত পাঠায়।
- ডাটা সোর্স (Data Source): ডাটাবেস অথবা অন্য কোনো ডাটা সোর্স থেকে ডাটা নিয়ে এসে ডাইনামিক কন্টেন্ট তৈরি করতে সাহায্য করে। জেএসপি সাধারণত JDBC (Java Database Connectivity) ব্যবহার করে ডাটা অ্যাক্সেস করতে পারে।
জেএসপি কাজের প্রক্রিয়া
জেএসপি পেজের কাজের প্রক্রিয়া নিম্নরূপ:
- রিকোয়েস্ট গ্রহণ: ক্লায়েন্ট (ব্যবহারকারী) ওয়েব ব্রাউজার থেকে একটি HTTP রিকোয়েস্ট পাঠায় যা সার্ভারের কাছে যায়।
- জেএসপি পেজ কম্পাইল করা: যখন প্রথমবারের মতো একটি JSP পেজে রিকোয়েস্ট করা হয়, তখন জেএসপি কন্টেইনার এই পেজটিকে Java সার্ভলেটে রূপান্তরিত করে এবং কম্পাইল করে। এই প্রক্রিয়াটি একটি এক্সিকিউটেবল ক্লাস তৈরি করে, যা পরবর্তী রিকোয়েস্টের জন্য ব্যবহৃত হয়।
- সার্ভারে প্রক্রিয়া: JSP পেজটি Java কোড এবং HTML কোডের মিশ্রণ থাকে। Java কোডটি রান হওয়ার পরে, এটি HTML রেসপন্স তৈরি করে, যা ক্লায়েন্টের ব্রাউজারে প্রদর্শিত হয়।
- রেসপন্স ফেরত পাঠানো: সার্ভার ক্লায়েন্টের ব্রাউজারে HTML রেসপন্স পাঠায়। এতে ডাইনামিক কন্টেন্ট যেমন ডাটাবেস থেকে প্রাপ্ত তথ্য, কাস্টম ট্যাগের মাধ্যমে তৈরি করা কন্টেন্ট থাকে।
- ডাইনামিক কন্টেন্ট তৈরি: JSP পেজ সাধারণত ডাটাবেস থেকে তথ্য নিয়ে, ব্যবহারকারী ইনপুট প্রক্রিয়াজাত করে এবং JavaBeans, টেমপ্লেট ইঞ্জিন বা অন্যান্য টেকনোলজি ব্যবহার করে ডাইনামিক কন্টেন্ট তৈরি করে।
এই প্রক্রিয়া ও আর্কিটেকচারের মাধ্যমে, জেএসপি ওয়েব অ্যাপ্লিকেশনগুলোকে ডাইনামিক ও ইন্টারঅ্যাকটিভ করে তোলে এবং ওয়েব ডেভেলপমেন্টকে আরও সহজ ও কার্যকরী করে।
জেএসপি (JSP) এর একটি নির্দিষ্ট লাইফসাইকেল (lifecycle) রয়েছে, যা প্রতিটি জেএসপি পেজের মধ্যে বিভিন্ন পর্যায়ে বিভক্ত। লাইফসাইকেলটি মূলত তিনটি ধাপে বিভক্ত: ট্রান্সলেশন, কম্পাইলেশন, এবং এক্সিকিউশন। এই তিনটি ধাপে, জেএসপি পেজটি কীভাবে সার্ভারে প্রসেস হয় তা নির্ধারিত হয়।
১. ট্রান্সলেশন (Translation)
ট্রান্সলেশন পর্যায়ে, যখন একটি জেএসপি পেজ প্রথমবার ক্লায়েন্ট থেকে রিকোয়েস্ট হয়, তখন সার্ভার সেই জেএসপি ফাইলটিকে একটি সার্ভলেট (Servlet) ক্লাসে রূপান্তরিত করে। এই পর্যায়ে জেএসপি পেজের HTML, Java কোড, এবং জেএসপি ট্যাগ গুলো সার্ভলেটে কনভার্ট হয়। এটি সার্ভারে চলার উপযোগী একটি Java ক্লাসে পরিণত হয়।
ট্রান্সলেশন প্রক্রিয়া:
- জেএসপি পেজটি প্রথমে প্রি-প্রসেস (Pre-processing) হয়।
- তারপর এটি একটি সার্ভলেট সোর্স কোডে রূপান্তরিত হয়।
- এবং সর্বশেষে, সার্ভলেট সোর্স কোডটি কম্পাইল করা হয়।
২. কম্পাইলেশন (Compilation)
কম্পাইলেশন পর্যায়ে, ট্রান্সলেশন পরবর্তী সার্ভলেট সোর্স কোডটি Java কম্পাইলার দ্বারা কম্পাইল করা হয়। এটি একটি .class ফাইল হিসেবে সংরক্ষিত হয়, যা জাভা ভিএম (JVM) দ্বারা এক্সিকিউট করা যায়। একবার এই ফাইলটি কম্পাইল হলে, পরবর্তীতে সার্ভার এটি ব্যবহার করে ক্লায়েন্ট রিকোয়েস্ট প্রসেস করতে পারে।
কম্পাইলেশন প্রক্রিয়া:
- সার্ভলেট সোর্স কোডটি কম্পাইল হয়ে
.classফাইলে পরিণত হয়। - সার্ভার পরবর্তীতে এই কম্পাইল করা
.classফাইলটি ব্যবহার করে ক্লায়েন্ট রিকোয়েস্ট প্রসেস করবে।
৩. এক্সিকিউশন (Execution)
এক্সিকিউশন পর্যায়ে, কম্পাইল করা সার্ভলেটের কোডটি চলতে শুরু করে এবং এটি HTTP রিকোয়েস্টের ভিত্তিতে ডাইনামিক কন্টেন্ট তৈরি করে। এই পর্যায়ে, সার্ভলেট HTML, CSS, এবং JavaScript কোডের সাথে ডাটা ম্যানিপুলেশন করে রেসপন্স পেজ তৈরি করে। সার্ভার এই রেসপন্স পেজটি ক্লায়েন্ট ব্রাউজারে পাঠিয়ে দেয়।
এক্সিকিউশন প্রক্রিয়া:
- সার্ভলেটটি রান করে এবং ক্লায়েন্টের রিকোয়েস্টের অনুযায়ী প্রাসঙ্গিক রেসপন্স তৈরি করে।
- এই রেসপন্সটি ক্লায়েন্টের ব্রাউজারে পাঠানো হয়।
জেএসপি লাইফসাইকেল এর এই তিনটি ধাপ নিশ্চিত করে যে, যখন একটি পেজ রিকোয়েস্ট করা হয়, তখন সার্ভারটি প্রয়োজনীয় Java কোড প্রসেস করতে এবং ডাইনামিক কন্টেন্ট তৈরি করতে পারে।
জেএসপি (JSP) সাধারণত ডাইনামিক ওয়েব পেজ তৈরি করতে ব্যবহৃত হয়, যেখানে HTML, Java কোড এবং অন্যান্য ডাটাবেস থেকে প্রাপ্ত তথ্য যুক্ত করা যায়। যদিও জেএসপি নিজেই একটি টেমপ্লেট-ভিত্তিক প্রযুক্তি, এটি সার্ভলেট (Servlet) হিসেবে কাজ করার ক্ষমতা রাখে। এই ক্ষমতা ব্যবহার করে আপনি ডাইনামিক কন্টেন্ট তৈরি করার পাশাপাশি সার্ভলেটের মাধ্যমে ডাটা প্রসেসিংও করতে পারেন।
সার্ভলেট কি এবং এটি কিভাবে জেএসপির সাথে সম্পর্কিত?
সার্ভলেট (Servlet) হল একটি Java প্রোগ্রাম যা ওয়েব সার্ভারে রান হয় এবং HTTP রিকোয়েস্টের ভিত্তিতে রেসপন্স প্রদান করে। এটি সাধারণত ডেটা প্রক্রিয়া করার জন্য ব্যবহৃত হয়। অন্যদিকে, জেএসপি (JSP) হল একটি ওয়েব টেমপ্লেট যা HTML এবং Java কোডকে একত্রিত করে।
যখন আপনি জেএসপি তে সার্ভলেট হিসেবে কাজ করতে চান, আপনি মূলত সার্ভলেটের মধ্যে লেখা Java কোডকে জেএসপি পেজে লিখে ফেলেন, যা আপনার পেজের ডাইনামিক কন্টেন্ট তৈরি করবে।
জেএসপি তে সার্ভলেট হিসেবে কাজ করার জন্য কয়েকটি মূল পদ্ধতি
১. জেএসপি তে স্ক্রিপলেট ব্যবহার করা:
জেএসপি পেজে Java কোড সাধারণত <% %> ট্যাগের মধ্যে লেখা হয়, যা সার্ভলেট কোডের মতো কাজ করে। উদাহরণস্বরূপ:
<%
String message = "Hello, JSP!";
out.println(message);
%>
এখানে স্ক্রিপলেটের মাধ্যমে Java কোডের লজিক সরাসরি HTML কনটেন্টের মধ্যে এমবেড করা হয়, যা সার্ভলেটের কাজের মতো।
২. জেএসপি তে রিকোয়েস্ট এবং রেসপন্স অবজেক্ট ব্যবহার করা:
যেহেতু জেএসপি পেজ একটি সার্ভলেটের মতো কাজ করে, আপনি HttpServletRequest এবং HttpServletResponse অবজেক্টগুলিও ব্যবহার করতে পারেন। উদাহরণস্বরূপ:
<%
String username = request.getParameter("username");
response.setContentType("text/html");
out.println("<h2>Welcome, " + username + "!</h2>");
%>
এখানে request এবং response অবজেক্ট ব্যবহার করে HTTP রিকোয়েস্টের ডাটা প্রক্রিয়া করা হচ্ছে।
৩. জেএসপি তে ফিল্টার বা লিসেনার ব্যবহার করা:
জেএসপি পেজে প্রক্রিয়াকরণ লজিক সম্পাদন করার সময় filter বা listener ক্লাসের মাধ্যমে আরও উন্নত কার্যক্রম করা যেতে পারে, যা সার্ভলেটের মতো আচরণ করবে।
জেএসপি এবং সার্ভলেটের মধ্যে পার্থক্য
জেএসপি এবং সার্ভলেট উভয়ই Java Web প্রযুক্তির অংশ হলেও তাদের কাজের পদ্ধতি কিছুটা আলাদা:
- জেএসপি তে HTML এবং Java কোড একত্রিত করা হয়, যেখানে HTML টেমপ্লেট এবং ডাইনামিক কন্টেন্ট তৈরি করার জন্য Java কোড ব্যবহার করা হয়।
- সার্ভলেট শুধুমাত্র Java কোড ব্যবহার করে HTTP রিকোয়েস্টের সাথে ইন্টারঅ্যাক্ট করে এবং সাধারণত HTML টেমপ্লেট বা UI এলিমেন্ট তৈরি করতে ব্যবহৃত হয় না। তবে সার্ভলেট এবং জেএসপি একসাথে কাজ করে, যেখানে সার্ভলেট ডাটা প্রসেসিং করে এবং জেএসপি ইউজার ইন্টারফেস বা UI তৈরি করে।
এভাবে, জেএসপি কে সার্ভলেট হিসেবে ব্যবহার করে আপনি ডাইনামিক কন্টেন্ট তৈরি করতে পারেন এবং সার্ভলেটের মাধ্যমে বিভিন্ন ধরনের ডাটা প্রসেসিং কার্যক্রম পরিচালনা করতে পারেন।
জেএসপি (JSP) এবং সাভলেট (Servlet) দুটি Java প্রযুক্তি, যা ওয়েব অ্যাপ্লিকেশনে সার্ভার সাইড লজিক প্রয়োগে ব্যবহৃত হয়। কখনো কখনো, আপনাকে জেএসপি থেকে সাভলেট কল করতে হতে পারে, যেমন ডেটা প্রসেসিং বা কিছু নির্দিষ্ট কাজের জন্য। এটি সাধারণত একটি রিকোয়েস্ট বা ফর্ম সাবমিশনের মাধ্যমে করা হয়। এখানে দেখানো হবে কিভাবে জেএসপি থেকে সাভলেট কল করা যায়।
জেএসপি থেকে সাভলেট কল করার প্রক্রিয়া
১. ফর্ম তৈরি করা
প্রথমত, আপনাকে একটি HTML ফর্ম তৈরি করতে হবে জেএসপি পেজে, যা ইউজার ইনপুট সংগ্রহ করবে এবং তারপর সেই ইনপুট সাভলেটের কাছে পাঠানো হবে।
<form action="myServlet" method="POST">
<label for="name">নাম:</label>
<input type="text" id="name" name="name" />
<input type="submit" value="Submit" />
</form>
এখানে, action="myServlet" নির্দেশ করে যে, ফর্মটি myServlet নামক সাভলেটের কাছে পাঠানো হবে। method="POST" সেভাবে পদ্ধতি নির্বাচন করে যেটি HTTP POST রিকোয়েস্ট ব্যবহার করবে।
২. সাভলেট তৈরি করা
এখন, আপনাকে একটি সাভলেট তৈরি করতে হবে যা ফর্মের ইনপুট গ্রহণ করবে এবং সেই অনুযায়ী ডেটা প্রসেস করবে।
@WebServlet("/myServlet")
public class MyServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
// এখানে প্রয়োজনীয় ডেটা প্রসেসিং বা কার্যক্রম করা যেতে পারে
// রেসপন্সে একটি মেসেজ পাঠানো
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>হ্যালো, " + name + "!</h1>");
}
}
এখানে @WebServlet("/myServlet") অ্যানোটেশনটি সাভলেটকে /myServlet URL প্যাটার্নের সাথে মেপ করে। doPost মেথডে ফর্মের ইনপুট request.getParameter("name") দ্বারা গ্রহণ করা হচ্ছে এবং তারপর সেই ইনপুটের ভিত্তিতে একটি বার্তা রিটার্ন করা হচ্ছে।
৩. জেএসপি পেজে সাভলেট রেসপন্স শো করা
জেএসপি পেজে সাভলেট থেকে রিটার্ন হওয়া রেসপন্স দেখানোর জন্য, আপনি সাভলেটের আউটপুট স্ট্রিম ব্যবহার করতে পারেন। উদাহরণস্বরূপ, যদি সাভলেট PrintWriter দিয়ে HTML রিটার্ন করে, তবে সেটি সরাসরি ব্রাউজারে প্রদর্শিত হবে।
৪. জেএসপি থেকে সাভলেটের কল
যেহেতু ফর্মের action এট্রিবিউট দিয়ে আপনি সাভলেটের URL নির্দেশ করেছেন, সুতরাং ফর্ম সাবমিট করলে সেই রিকোয়েস্ট সাভলেটের কাছে চলে যাবে। সাভলেট এরপর রেসপন্স ফিরিয়ে দিবে যা ব্রাউজারে দেখা যাবে।
এইভাবে, জেএসপি পেজ থেকে সাভলেট কল করা সম্ভব এবং ডাইনামিক ডেটা প্রসেসিং করা যায়।
Read more